home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / hash / Hash_PrintStats.c < prev    next >
C/C++ Source or Header  |  1988-07-25  |  2KB  |  94 lines

  1. /* 
  2.  * Hash_PrintStats.c --
  3.  *
  4.  *    Source code for the Hash_PrintStats library procedure.
  5.  *
  6.  * Copyright 1988 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that the above copyright
  10.  * notice appear in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  */
  15.  
  16. #ifndef lint
  17. static char rcsid[] = "$Header: Hash_PrintStats.c,v 1.2 88/07/25 10:53:41 ouster Exp $ SPRITE (Berkeley)";
  18. #endif not lint
  19.  
  20. #include <hash.h>
  21. #include <list.h>
  22. #include <stdio.h>
  23.  
  24.  
  25. /*
  26.  *---------------------------------------------------------
  27.  *
  28.  * Hash_PrintStats --
  29.  *
  30.  *    This routine calls a caller-supplied procedure to print
  31.  *    statistics about the current bucket situation.
  32.  *
  33.  * Results:    
  34.  *    None.
  35.  *
  36.  * Side Effects:    
  37.  *    Proc gets called (potentially many times) to output information
  38.  *    about the hash table. It must have the following calling sequence:
  39.  *
  40.  *    void
  41.  *    proc(clientData, string)
  42.  *        ClientData clientData;
  43.  *        char *string;
  44.  *    {
  45.  *    }
  46.  *
  47.  *    In each call, clientData is the same as the clientData argument
  48.  *    to this procedure, and string is a null-terminated string of
  49.  *    characters to output.
  50.  *
  51.  *---------------------------------------------------------
  52.  */
  53.  
  54. void
  55. Hash_PrintStats(tablePtr, proc, clientData)
  56.     Hash_Table *tablePtr;        /* Table for which to print info. */
  57.     void (*proc)();            /* Procedure to call to do actual
  58.                          * I/O. */
  59. {
  60.     int count[10], overflow, i, j;
  61.     char msg[100];
  62.     Hash_Entry     *hashEntryPtr;
  63.     List_Links    *hashList;
  64.  
  65.     for (i=0; i<10; i++) {
  66.     count[i] = 0;
  67.     }
  68.     overflow = 0;
  69.     for (i = 0; i < tablePtr->size; i++) {
  70.     j = 0;
  71.     hashList = &(tablePtr->bucketPtr[i]);
  72.     LIST_FORALL(hashList, (List_Links *) hashEntryPtr) {
  73.         j++;
  74.     }
  75.     if (j < 10) {
  76.         count[j]++;
  77.     } else {
  78.         overflow++;
  79.     }
  80.     }
  81.  
  82.     sprintf(msg, "Entries in table %d number of buckets %d\n", 
  83.         tablePtr->numEntries, tablePtr->size);
  84.     (*proc)(clientData, msg);
  85.     for (i = 0;  i < 10; i++) {
  86.     sprintf(msg, "Number of buckets with %d entries: %d.\n",
  87.         i, count[i]);
  88.     (*proc)(clientData, msg);
  89.     }
  90.     sprintf(msg, "Number of buckets with > 9 entries: %d.\n",
  91.         overflow);
  92.     (*proc)(clientData, msg);
  93. }
  94.